import { defineStore } from "pinia";
import { ref } from "vue";
import { storage } from "../utils";
import { service } from "../service";

// 本地缓存
const data = storage.info();

const useTenantStore = defineStore("tenant", function () {
    // 租户ID
    const tenantId = ref(data.tenantId || "");

    // 租户信息
    const info = ref(data.tenantInfo || null);

    // 设置租户ID
    function setTenantId(id: string) {
        tenantId.value = id;

        // 存储租户ID
        storage.set("tenantId", id);
    }

    // 设置租户信息
    function setInfo(data: any) {
        info.value = data;

        // 存储租户信息
        storage.set("tenantInfo", data);
    }

    // 获取租户信息
    async function getInfo() {
        if (tenantId.value) {
            try {
                // 调用接口获取租户详情
                const res = await service.tenant.info({
                    id: tenantId.value
                });

                // 设置租户信息
                setInfo(res);

                return res;
            } catch (e) {
                console.error("获取租户信息失败", e);
            }
        }

        return null;
    }

    // 清除租户信息
    function clear() {
        tenantId.value = "";
        info.value = null;

        // 清除存储
        storage.remove("tenantId");
        storage.remove("tenantInfo");
    }

    // 解析scene参数中的租户ID
    function parseScene(scene: string) {
        try {
            // 尝试解析不同格式的 scene
            if (scene.includes('tenantId=')) {
                // 格式如: tenantId=123 或 a=1&tenantId=123&b=2
                const params = new URLSearchParams(scene);
                const id = params.get('tenantId');
                if (id) {
                    setTenantId(id);
                    return id;
                }
            } else if (scene.includes(',')) {
                // 格式如: key1,value1,key2,value2
                const params = scene.split(',');
                for (let i = 0; i < params.length; i += 2) {
                    if (params[i] === 'tenantId' && i + 1 < params.length) {
                        const id = params[i + 1];
                        setTenantId(id);
                        return id;
                    }
                }
            }
        } catch (error) {
            console.error('解析scene参数失败', error);
        }

        return null;
    }

    return {
        tenantId,
        info,
        setTenantId,
        setInfo,
        getInfo,
        clear,
        parseScene
    };
});

export { useTenantStore }; 